import * as THREE from '../../build/three.module.js';

/**
 * 本地坐标（模型坐标）：是模型对象相对模型的父对象而言，模型位置属性 .position 标识的坐标值就是以本地坐标系为参考，表示子对象相对本地坐标系原点(0,0,0)的便宜
 * 
 * 世界坐标：是对 Threejs 场景独享 Scent 建立的一个坐标系，一个模型相对世界坐标系的坐标值就是改模型对象所有父对象及模型本身位置属性 .potstion 的叠加
 */

let scene = new THREE.Scene();

let geo = new THREE.BoxGeometry(50, 50, 50);
let mat = new THREE.MeshBasicMaterial({
  color: 0x0000ff
});

let mesh = new THREE.Mesh(geo, mat);
mesh.position.set(50, 0, 0); // mesh 的本地坐标为 (50, 0, 0)

let group = new THREE.Group();
group.position.set(50, 0, 0);
// group 本地坐标设置为 （50， 0， 0）
group.add(mesh);

scene.add(group);

// .position 属性获取模型的本地坐标
console.log('本地坐标', mesh.position);

// getWorldPosition() 方法继承自 Object3D 类型，用于获得模型的世界坐标值

scene.updateMatrixWorld(true);
// 这句代码在 threejs 渲染过程中执行，如果在渲染前想获得世界矩阵或位置属性，需要手动执行
let worldPosition = new THREE.Vector3();
mesh.getWorldPosition(worldPosition); // 获取 mesh 的世界坐标，存储到 worldPosition 中
console.log('世界坐标', worldPosition);

/**
 * 除了坐标外，还有
 *  本地缩放系数：.scale
 *  世界缩放系数：.getWorldScale()
 * 
 *  本地旋转角度：.rotation
 *  世界旋转角度：.getWroldRotation()
 * 
 *  本地矩阵：.materix （以矩阵的形式存放了模型的旋转、缩放、平移变换）
 *  世界矩阵：.materixWrold
 */
